
class Parent:

    def __init__(self, name):
        self.name = name
        print('parent的init函数被执行了')

    def say_hello(self):
        print(f'{self.name}: hello')
        print('parent的say_hello函数被执行了')


class Son(Parent):

    def __init__(self, name, age): # 函数的重载，面向对象开发中，和父类的参数不同
        # self.name = name
        super().__init__(name)  # 实际开发中，在子类中，调用继承父类的函数，实现一定的功能
        self.age = age
        print('son的init函数被执行了')

    def say_hello(self):
        print(f'{self.name}: hello world!')
        print('Son的say_hello函数被执行了')

s1 = Son('张三', 32)
s1.say_hello()


# 父类(被继承的类)的函数都会被子类(继承的新类)继承，当基类（父类）中的某个函数不完全适用于子类时，就需要在子类中重写父类的这个函数。
# 而且函数的名字必须一模一样。
# Python 还有一个 super() 函数，通过使用 super() 函数，在重写父类函数时，让super().调用在父类中封装的函数.
#
# 如果在开发中，子类的函数中包含父类的函数，父类原本的函数是子类函数的一部分，就可以采用扩展的方式。
#
# 扩展的方式步骤：
#
# 1. 在子类中重写父类的函数
# 2. 在需要的位置使用 super().父类函数 来调用父类函数的执行
# 3. 代码其他的位置针对子类的需求，编写子类特有的代码实现